﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using MimiDouban.Abstract.Beans;

namespace MimiDouban.Abstract
{
    /// <summary>
    /// 用于显示消息的输出界面
    /// </summary>
    public interface IOutputUI
    {
        /// <summary>
        /// 开始显示界面
        /// </summary>
        void start();

        /// <summary>
        /// 显示一首歌曲的信息
        /// </summary>
        /// <param name="song">要显示的歌曲</param>
        void ShowSongInfo(DoubanSong song);

        /// <summary>
        /// 显示一个频道的信息
        /// </summary>
        /// <param name="channel">要显示的频道</param>
        void ShowChannel(DoubanChannel channel);

        /// <summary>
        /// 显示下一首歌曲的信息，其实就是多了一个切换的效果
        /// </summary>
        /// <param name="song">下一首要显示的歌曲</param>
        void ShowNextSong(DoubanSong song);

        /// <summary>
        /// 显示当前的播放事件
        /// </summary>
        /// <param name="min">分</param>
        /// <param name="sec">秒</param>
        void showTime(int min, int sec);

        /// <summary>
        /// 显示缓冲
        /// </summary>
        /// <param name="str">缓冲</param>
        /// <param name="currentTime">播放播放时间，秒</param>
        void showBuffer(string str, int currentTime);

        /// <summary>
        /// 显示歌词
        /// </summary>
        /// <param name="str">歌词</param>
        /// <param name="currentTime">播放播放时间，秒</param>
        /// <param name="dur">持续时间</param>
        void showLyric(string str, int currentTime,TimeSpan dur);

        /// <summary>
        /// 设置喜欢按钮的状态
        /// </summary>
        /// <param name="status">被设置的状态</param>
        void setLikeStatus(ControlStatus status);

        /// <summary>
        /// 返回喜欢按钮的状态
        /// </summary>
        /// <returns></returns>
        ControlStatus getLikeStatus();

        /// <summary>
        /// 设置不喜欢按钮的状态
        /// </summary>
        /// <param name="status"></param>
        void setDislikeStatus(ControlStatus status);

        /// <summary>
        /// 设置暂停按钮的状态
        /// </summary>
        /// <param name="paused"></param>
        void setPauseStatus(bool paused);

        /// <summary>
        /// 显示登录界面
        /// </summary>
        void showLogin();

        /// <summary>
        /// 显示当前已经登录的用户名
        /// </summary>
        /// <param name="username"></param>
        void showCurrentUser(string username);

        /// <summary>
        /// 显示登录按钮
        /// </summary>
        void showLoginBtn();


        void showVolume(double volume);

        /// <summary>
        /// 获取或者设置所有的频道列表，当用户
        /// 需要换频道的时候会用到
        /// </summary>
        DoubanChannel[] Channels
        {
            get;
            set;
        }

        /// <summary>
        /// 结束界面
        /// </summary>
        void end();
    }
}
